1. Field of the Invention
The present invention relates to the access of data in a storage subsystem by multiple hosts. More particularly, the invention concerns a system to provide multiple hosts with concurrent access to cached data by selectively generating, maintaining, modifying, and consolidating multiple versions of data items in cache memory to efficiently accommodate data access requests by the hosts.
2. Description of the Related Art
In storage subsystems that implement RAID architecture, disk resident data is protected from loss by a form of data redundancy known as "parity." This redundancy ensures that if a storage device fails, the data can still be reconstructed. Data sectors and parity sectors are distributed across the devices in the array. The data sectors and their corresponding parity sectors are grouped in such a way as to afford continuous availability and maximized update performance. New parity is calculated whenever a sector containing modified data is destaged.
To maintain consistency within the parity domain, the parity sectors must be updated at the same time as their respective data sectors; it is essential that the update of the data and parity sectors be atomic to ensure data integrity. This is accomplished by using a locking mechanism. The unit of data under control of the lock is known as a "segment." Depending upon the granularity of the lock, data availability and write access may be affected while a destage is in progress.
Generally, a storage subsystem's throughput is constrained unless that system inherently supports continuous data availability despite concurrent stage/destage operations and simultaneous access by multiple hosts. One problem in locking systems concerns the updating of data undergoing a destage operation. In particular, when modified data is being destaged, a lock may be applied to each segment (e.g. logical track) of the data. The subsystem will not accept a subsequent write to the segment until the lock is released, i.e. when the destage completes. The desired write operation is deferred by "control unit initiated command retry"; the command chain remains pending at the subchannel until the subsystem presents ending status. The busy subchannel will prevent any further operations for this logical device from being initiated by this host until the command chain is completed. As a result, data being destaged from cache may be accessible to host Read operations, but it cannot be updated for the duration of the destage due to the lock placed upon the data segment.
Another problem in known systems may occur with a partial-Read-miss. A Read-miss occurs when the cache cannot satisfy the host request. If a Read-miss occurs for a track that has modified data in cache, the modified data will be first destaged; when the destage completes, the track will be staged to cache to satisfy the Read request. The command chain remains pending at the subchannel until the data is available in cache. As a result, a partial-Read-miss may force destaging of modified data before the Read request can be satisfied, resulting in significant delays to host Read and Write operations.
The segment locking approach to cache management can be especially problematic with log structured array ("LSA") storage. In particular, destaging with LSA storage is typically not performed until a complete data segment is accumulated. Thus, when destaging does finally occur, it takes longer to complete. Therefore, other processes are put at a disadvantage to the destaging process, because the other processes cannot accurately anticipate the locking of the destaged data segment, and because the lock is maintained for longer to the exclusion of the other processes.